package com.hospital.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 公告实体类
 *
 * @author Hospital Management System
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("tb_announcement")
public class Announcement extends BaseEntity {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 公告标题
     */
    @TableField("title")
    private String title;

    /**
     * 公告内容
     */
    @TableField("content")
    private String content;

    /**
     * 公告类型：system-系统公告，department-科室通知，emergency-紧急通知，maintenance-维护通知，policy-政策通知
     */
    @TableField("type")
    private String type;

    /**
     * 优先级：low-低，normal-普通，high-高，urgent-紧急
     */
    @TableField("priority")
    private String priority;

    /**
     * 目标受众：doctor-医生，admin-管理员，patient-患者
     */
    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private List<String> targetAudience;

    /**
     * 状态：0-草稿，1-已发布，2-已撤回，3-已过期
     */
    @TableField("status")
    private Integer status;

    /**
     * 发布时间
     */
    @TableField("publish_time")
    private LocalDateTime publishTime;

    /**
     * 过期时间
     */
    @TableField("expiry_time")
    private LocalDateTime expiryTime;

    /**
     * 是否置顶：0-否，1-是
     */
    @TableField("is_top")
    private Integer isTop;

    /**
     * 置顶截止时间
     */
    @TableField("top_until")
    private LocalDateTime topUntil;

    /**
     * 是否允许评论：0-否，1-是
     */
    @TableField("allow_comment")
    private Integer allowComment;

    /**
     * 发布人ID
     */
    @TableField("publisher_id")
    private Long publisherId;

    /**
     * 发布人姓名
     */
    @TableField("publisher_name")
    private String publisherName;

    /**
     * 查看次数
     */
    @TableField("view_count")
    private Integer viewCount;

    /**
     * 阅读次数
     */
    @TableField("read_count")
    private Integer readCount;

    /**
     * 附件信息（JSON字符串）
     */
    @TableField("attachments")
    private String attachments;

    /**
     * 撤回原因
     */
    @TableField("withdraw_reason")
    private String withdrawReason;

    /**
     * 撤回时间
     */
    @TableField("withdraw_time")
    private LocalDateTime withdrawTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;

    // 非数据库字段
    /**
     * 目标受众列表（用于前端显示）
     */
    @TableField(exist = false)
    @JsonIgnore
    private List<String> targetAudienceList;

    /**
     * 阅读率
     */
    @TableField(exist = false)
    private Double readRate;

    /**
     * 类型名称
     */
    @TableField(exist = false)
    private String typeName;

    /**
     * 优先级名称
     */
    @TableField(exist = false)
    private String priorityName;

    /**
     * 状态名称
     */
    @TableField(exist = false)
    private String statusName;
} 